package com.bawei.base.http

import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.Observer
import java.util.concurrent.atomic.AtomicBoolean

//数据倒灌
class SingleLiveData<T>:MutableLiveData<T>() {

    //定义一个变量，用来观察是否是最新的数据 号只有是最新数据时，才发生变化
    private var flag = AtomicBoolean(false)//具有原子性，多线程也能保证具有唯一性

    //赋值   当数据赋值时为最新的数据
    override fun postValue(value: T) {
        flag.set(true)
        //
        super.postValue(value)
    }

    //观察   当拿到最新数据发生变化时，数据就不是最新的了
    override fun observe(owner: LifecycleOwner, observer: Observer<in T>) {
        super.observe(owner){
            if (flag.compareAndSet(true,false)){
                observer.onChanged(it)
            }
        }
    }

}